package com.zjl.legendary.controller;

import com.zjl.legendary.dto.QuestionDto;
import com.zjl.legendary.dto.TaskQuestionDto;
import com.zjl.legendary.entity.TaskItem;
import com.zjl.legendary.entity.UserTask;
import com.zjl.legendary.service.intf.QuestionService;
import com.zjl.legendary.service.intf.TaskItemService;
import com.zjl.legendary.service.intf.UserTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhoujingluo
 * @date 2021/6/14 11:25
 */
@Controller
@RequestMapping("/api/taskitem")
public class TaskItemController {
    @Autowired
    private TaskItemService taskItemService;
    @Autowired
    private UserTaskService userTaskService;
    @Autowired
    private QuestionService questionService;

    /**
     * 新增任务详情
     * @param req 请求
     * @return 响应结果
     */
    @RequestMapping("/add.do")
    public String add(HttpServletRequest req){
        //创建空集合用于存储用户任务详情
        List<TaskItem> tilist = new ArrayList<>();
        //收参
        Integer nums = Integer.valueOf(req.getParameter("nums"));
        Integer tid = Integer.valueOf(req.getParameter("tid"));
        //封装用户任务详情
        for (int i = 1;i <= nums;i++){
            Integer qid = Integer.valueOf(req.getParameter("qid" + i));
            TaskItem taskItem = new TaskItem();
            taskItem.setTid(tid);
            taskItem.setQid(qid);
            tilist.add(taskItem);
        }
        //批量存储用户任务详情
        if (taskItemService.saveBatch(tilist)){
            //保存成功跳转展示任务页面
            return "redirect:/api/task/show.do";
        } else {
            //保存失败跳转新增任务页面
            return "redirect:/api/question/showForTask.do";
        }
    }

    /**
     * 展示任务详情
     * 由于“详情”与“测试”都需要任务详情，
     * 为简化代码，在请求路径中以参数形式包含要跳转的页面信息
     * 该方法根据接收到的跳转信息进行相应的页面跳转
     * @param req 请求
     * @return 响应结果
     */
    @RequestMapping("/show.do")
    public String show(HttpServletRequest req){
        //收参
        //获取跳转的页面信息
        String topage = req.getParameter("to");
        //获取任务id
        Integer tid = Integer.valueOf(req.getParameter("tid"));
        //根据任务id查询任务详情
        List<TaskQuestionDto> item = taskItemService.queryByTid(tid);
        //根据任务id查询当前任务信息
        UserTask currtask = userTaskService.queryById(tid);
        //未添加任务详情时，需要获取题库列表用于任务详情的添加
        List<QuestionDto> qlist = questionService.query();
        //存储查询结果
        req.setAttribute("item",item);
        req.setAttribute("currtask",currtask);
        req.getSession().setAttribute("qlist",qlist);
        //转发给对应的页面
        return "forward:/safety/"+topage;
    }

    /**
     * 用户进行任务测试
     * 用户完成测试需要保存用户的答案，以及修改任务状态
     * 用户完成答题，则修改对应任务详情的状态
     * 完成答题修改任务状态
     * @param req 请求
     * @return 响应结果
     */
    @RequestMapping("/test.do")
    public String test(HttpServletRequest req){
        //收参
        //任务id
        String tid = req.getParameter("tid");
        //任务详情id数组
        String[] ids = req.getParameterValues("ids");
        //用户答案数组
        String[] uanswers = req.getParameterValues("uanswers");

        taskItemService.test(tid,ids,uanswers);

        //完成测试跳转到展示任务列表页面
        return "redirect:/api/task/show.do";
    }
}
